// 模块化
// cjs和esm的区别
// Cjs是基于运行时的同步加载，esm是基于编译时的异步加载
    // require可以掺杂到逻辑中，import只能在最上层引入
// Cjs是可以修改值的，esm值并且不可修改（可读的）
// Cjs不可以tree shaking，esm支持tree shaking
// commonjs中顶层的this指向这个模块本身，而ES6中顶层this指向undefined

// import 动态引入，在逻辑里编写, 需要使用函数模式
// if(true) {
//     import('./test.js').then(res => {

//     })
// }


// commonjs规范
/*
    require引入
    五种模式
        1、引入自己编写的模块
            require('./test.js')
        2、引入第三方模块
            require('express')
        3、引入nodejs内置模块
            const fs = require('node:fs') // 高版本可以这样引用，低版本不能这样引用
        4、C++扩展 addon  napi  使用node-gyp编译压缩生成 .node 文件
            require('./xx.node')
        5、引入json文件
            require('./data.json')
    导出 module.exports
        module.exports={
            success: 1,
            error: 0
        }
    引用
        const test = require('test.js')
        const {success, error} = require('test.js')
*/
// ESM规范
// package.json中的type要改成 module, 对应上，不然不能运行
/*
    import 引入
    import obj, {name} from './test.js'
    import * as all from './test.js'
    export 导出
        export const name = 'xx'
        export default {
            success: 1,
            error: 0
        }
    不支持引入json文件
    node高版本（18及以上）可以断言强制引入
    import json from './data.json' assert {type: "json"}
*/